package beans;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import utils.ChequeaGmail;
import bd.GestorBD;

public class BeanLoginAdmin {
	private String adminuser = "";
	private String nombreAdmin = "";

	public BeanLoginAdmin() {
		super();
	}

	public String getAdminuser() {
		return adminuser;
	}

	public void setAdminuser(String adminuser) {
		this.adminuser = adminuser;
	}

	public String getNombreAdmin() {
		return nombreAdmin;
	}

	public void setNombreAdmin(String nombreAdmin) {
		this.nombreAdmin = nombreAdmin;
	}

	/**
	 * Funcion que comprueba el administrador y la contrase�a
	 * 
	 * @throws Exception
	 */
	public boolean validarAdmin(String userName, String password)
			throws Exception {
		boolean b = true;
		if (!userName.equals("") && !password.equals("")) {
			if (existeAdmin(userName)) {
				if (!ChequeaGmail.validarPassw(userName, password)) {
					b = false;
					throw new Exception(
							"Nombre de usuario o contrase&ntilde;a no v&aacute;lidos" +
					"<br/>Por favor, vuelva a introducir su usuario y contrase&ntilde;a.");
				}
			} else {
				b = false;
				throw new Exception("El nombre de usuario no es de administrador. " +
						"<br/>Por favor, vuelva a introducir su usuario y contrase&ntilde;a.");
			}
		} else {
			b = false;
			throw new Exception("Nombre de usuario o contrase&ntilde;a vacios" +
			"<br/>Por favor, vuelva a introducir su usuario y contrase&ntilde;a.");
		}
		return b;
	}

	private List getAdmin() {
		List listAdmin = new LinkedList();
		ResultSet rsAdmin = null;
		StringBuffer query = new StringBuffer("SELECT * FROM administrador;");
		try {
			rsAdmin = GestorBD.consulta(query);
			if (rsAdmin != null) {
				while (rsAdmin.next()) {
					// la columna 2 contiene el nombre de administrador
					listAdmin.add(rsAdmin.getString(2) + ","
							+ rsAdmin.getString(3));
				}
			}
			rsAdmin.close();
		} catch (Exception e) {
			System.err.println("##### ERROR EN getAdmin");
		}
		return listAdmin;
	}

	private boolean existeAdmin(String user) {
		List listAdmin = getAdmin();
		Iterator it = listAdmin.iterator();
		while (it.hasNext()) {
			String usit = (String) it.next();
			String useraux = usit.substring(0, usit.indexOf(","));
			String nomuser = usit.substring(usit.indexOf(",") + 1);
			if (useraux.equals(user)) {
				this.nombreAdmin = nomuser;
				return true;
			}
		}
		return false;

	}

	public void conectar() {
		try {
			GestorBD.conectar();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void desconectar() {
		try {
			GestorBD.desconectar();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
